﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
using Ark.CookieGetterSharp;
using System.Net;

namespace CookieTester
{
  public partial class MainForm : Form
  {
    public MainForm()
    {
      InitializeComponent();
    }
    
    private Thread _thread;
    private void button_Click(object sender, EventArgs e)
    {
      string url = textBox.Text;
      _thread = new Thread(new ThreadStart(() =>
      {
        try
        {
          // 開始
          TraceLine("クッキー取得テストを開始します。");
          TraceLine("URL:" + url);
          TraceLine(string.Empty);

          // ブラウザ確認
          Trace.WriteLine("#region ブラウザチェック");
          TraceLine("インストールされているブラウザを取得します。");
          ICookieGetter[] iCookieGetters = CookieGetter.CreateInstances();
          TraceLine(string.Format("インストールされているブラウザは{0}件です", iCookieGetters.Length));
          Trace.Indent();
          foreach (var iCookieGetter in iCookieGetters)
            TraceLine(iCookieGetter.ToString());
          Trace.Unindent();
          Trace.WriteLine("#endregion");
          TraceLine(string.Empty);

          // ブラウザ毎にクッキー取得テスト
          foreach (var iCookieGetter in iCookieGetters)
          {
            Trace.WriteLine("#region " + iCookieGetter.ToString());
            TraceLine(iCookieGetter.ToString() + "のクッキーを取得します");
            Trace.Indent();

            TraceLine("CookieCollectionを取得します。");
            CookieCollection cookies = iCookieGetter.GetCookieCollection(new Uri(url));
            Trace.Indent();
            foreach (var cookie in cookies)
              TraceLine(cookie.ToString());
            Trace.Unindent();

            TraceLine("user_sessionのCookieを取得します。");
            Cookie cookie2 = iCookieGetter.GetCookie(new Uri(url), "user_session");
            Trace.Indent();
            if (cookie2 == null)
              TraceLine("user_sessionはありません。");
            else
              TraceLine(cookie2.ToString());
            Trace.Unindent();

            Trace.Unindent();
            Trace.WriteLine("#endregion");
            TraceLine(string.Empty);
          }

          TraceLine("クッキー取得テスト終了です。");
        }
        catch(Exception ex)
        {
          TraceLine(ex.Message);
        }
      }));
      _thread.Start();
    }

    private void TraceLine(string text)
    {
      Trace.WriteLine(text);
      this.Invoke((MethodInvoker)delegate()
      {
        richTextBox.Text += text +"\n";
      });
    }

    private void Form_FormClosing(object sender, FormClosingEventArgs e)
    {
      if (_thread != null && _thread.IsAlive)
        _thread.Abort();
    }
  }
}